import SpriteManager from './SpriteManager.js';
import MarioSprite from './MarioSprite.js';
import CloudSprite from './CloudSprite.js';
import BackgroundSprite from './BackgroundSprite.js';
import GroundSprite from './GroundSprite.js';
import ClockSprite from './ClockSprite.js';

/**
 * 项目中使用的精灵配置
 * 按渲染层级顺序排列（先注册的在底层）
 */
const SPRITE_CONFIG = [
    { name: 'background', sprite: BackgroundSprite },
    { name: 'ground', sprite: GroundSprite },
    { name: 'clouds', sprite: CloudSprite },
    { name: 'mario', sprite: MarioSprite },
    { name: 'clock', sprite: ClockSprite }
];

/**
 * 预加载所有精灵的资源
 * @returns {Promise<void>} 资源加载完成
 */
export async function loadAllSpriteResources() {
    // 创建临时实例来获取资源配置，不需要app参数
    const loadPromises = SPRITE_CONFIG.map(async ({ sprite: SpriteClass }) => {
        const tempSprite = new SpriteClass(null);
        if (tempSprite.loadResources) {
            await tempSprite.loadResources();
        }
    });

    await Promise.all(loadPromises);
}

/**
 * 向精灵管理器注册所有项目精灵
 * @param {SpriteManager} spriteManager - 精灵管理器实例
 */
export function registerAllSprites(spriteManager) {
    spriteManager.registerBatch(SPRITE_CONFIG);
}

/**
 * 创建精灵管理器（假设资源已预加载）
 * @param {Application} app - PIXI应用实例
 * @returns {Promise<SpriteManager>} 初始化完成的精灵管理器
 */
export async function createSpriteManager(app) {
    const spriteManager = new SpriteManager(app);
    registerAllSprites(spriteManager);
    
    for (const name of spriteManager.loadOrder) {
        const sprite = spriteManager.sprites.get(name);
        if (sprite && !sprite.isLoaded()) {
            await sprite.init();
            sprite.registerEvents();
            sprite.loaded = true;
        }
    }
    
    return spriteManager;
}